<?php
ini_set('date.timezone','Asia/Shanghai');
//error_reporting(E_ERROR); 
class wpay{ 
    var $dsql;
    var $mid;
    var $return_url = "http://域名/include/payment/lib/notify.php";

    function Alipay()
    {
        global $dsql;
        $this->dsql = $dsql;
	
    }

    function __construct()
    {
        $this->Alipay();
    }
	
	function GetCode($order, $payment){
		require_once "lib/WxPay.Config.php";
		require_once "lib/WxPay.Api.php";
		require_once "lib/WxPay.NativePay.php";
		require_once "lib/log.php";
		$notify = new NativePay();
		$url1 = $notify->GetPrePayUrl("123456789");

		//模式二
		/**
		 * 流程：
		 * 1、调用统一下单，取得code_url，生成二维码
		 * 2、用户扫描二维码，进行支付
		 * 3、支付完成之后，微信服务器会通知支付成功
		 * 4、在支付成功通知中需要查单确认是否真正支付成功（见：notify.php）
		 */
		 //echo $cfg_basehost.$this->return_url."&code=".$payment['code'];
		$price=$order['price']*100;
		$orderid=$order['out_trade_no'];
		$input = new WxPayUnifiedOrder();
		$input->SetBody("购买");
		$input->SetAttach("测试的");
		$input->SetOut_trade_no($orderid);
		//$input->SetOut_trade_no($payment['wpay_mchid'].date("YmdHis")); 
		$input->SetTotal_fee($price);  //总金额
		$input->SetTime_start(date("YmdHis"));
		$input->SetTime_expire(date("YmdHis", time() + 600));
		$input->SetGoods_tag("test2");
		$input->SetNotify_url($this->return_url);
		$input->SetTrade_type("NATIVE");
		$input->SetProduct_id($orderid); 
		$result = $notify->GetPayUrl($input);
		$url2 = $result["code_url"];	
		return "<img alt='微信二扫码支付' src='/include/payment/lib/qrcode.php?data=".urlencode($url2)."' style='width:150px;height:150px;'/>";
	}
	
	function  respond(){

		require_once "lib/WxPay.Config.php";
		require_once "lib/WxPay.Api.php";
		require_once "lib/WxPay.NativePay.php";
		require_once "lib/log.php";
        if (!empty($_POST))
        {
            foreach($_POST as $key => $data)
            {
                $_GET[$key] = $data;
            }
        }
        /* 引入配置文件 */
		
		
		$code = preg_replace( "#[^0-9a-z-]#i", "", $_GET['code'] );

		require_once DEDEDATA.'/payment/'.$code.'.php';
		
        /* 取得订单号 */

	
		$xml = $GLOBALS['HTTP_RAW_POST_DATA']; //返回的xml
 		file_put_contents(dirname(__FILE__).'/xml.txt',$xml); //记录日志 支付成功后查看xml.txt文件是否有内容 如果有xml格式文件说明回调成功
//file_get_contents(dirname(__FILE__).'/xml.txt');
 		$xmlObj=simplexml_load_string($xml,'SimplexmlElement',LIBxml_NOCDATA); 
 		$xmlArr=json_decode(json_encode($xmlObj),true);
 		$out_trade_no=$xmlArr['out_trade_no']; //订单号
		$total_fee=$xmlArr['total_fee']/100; //回调回来的xml文件中金额是以分为单位的
		$result_code=$xmlArr['result_code']; //状态
		if($result_code=='SUCCESS' && $this->success_db($out_trade_no)){ //数据库操作
		//处理数据库操作 例如修改订单状态 给账户充值等等
			return $msg = "支付成功!<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
			echo 'SUCCESS'; //返回成功给微信端 一定要带上不然微信会一直回调8次
			exit; 
		}else{ //失败
			return $msg = "支付失败！<br> <a href='/'>返回主页</a> <a href='/member'>会员中心</a>";
			return;
		 	exit;
		}

		}
		    /*处理物品交易*/
    function success_db($order_sn)
    {
        //获取订单信息，检查订单的有效性
        $row = $this->dsql->GetOne("SELECT state FROM #@__shops_orders WHERE oid='$order_sn' ");
        if($row['state'] > 0)
        {
            return TRUE;
        }    
        /* 改变订单状态_支付成功 */
        $sql = "UPDATE `#@__shops_orders` SET `state`='1' WHERE `oid`='$order_sn' AND `userid`='".$this->mid."'";
        if($this->dsql->ExecuteNoneQuery($sql))
        {
            $this->log_result("verify_success,订单号:".$order_sn); //将验证结果存入文件
            return TRUE;
        } else {
            $this->log_result ("verify_failed,订单号:".$order_sn);//将验证结果存入文件
            return FALSE;
        }
    }
	
	
	
	
	

}




//模式一
/**
 * 流程：
 * 1、组装包含支付信息的url，生成二维码
 * 2、用户扫描二维码，进行支付
 * 3、确定支付之后，微信服务器会回调预先配置的回调地址，在【微信开放平台-微信支付-支付配置】中进行配置
 * 4、在接到回调通知之后，用户进行统一下单支付，并返回支付信息以完成支付（见：native_notify.php）
 * 5、支付完成之后，微信服务器会通知支付成功
 * 6、在支付成功通知中需要查单确认是否真正支付成功（见：notify.php）
 */
 
 
